const urllib = require('urllib');
const random = require('lodash/random');

class SpiderBaseClass {

  /**
   * 第一页列表的页码
   */
  firstListPage () {
  }

  /**
   * 获取其它页码的列表页面
   * @param page
   * @return {hasNextPage:Boolean, nextPage}
   */
  getListPage (page) {
  }

  /**
   * 获取 直播平台 直播标签 的直播间列表
   * @param data
   */
  getTagPage (data) {
    return null;
  }

  /**
   * 分析列表数据
   * @param data
   */
  parseListPage (data) {
  }

  /**
   * 获取直播间信息
   * @param room
   */
  getRoom (room) {
  }

  /**
   * 发出网络请求
   * @param url
   * @param options
   * @return {Promise<*>}
   */
  static get (url, options = {}) {
    return urllib.request(url,
      Object.assign({timeout: 5000, followRedirect: true}, options));
  }

  /**
   * 发出网络请求
   * @param url
   * @param options
   * @return {Promise<*>}
   */
  static post (url, options = {}) {
    return urllib.request(url,
      Object.assign({timeout: 5000, followRedirect: true}, options, {method: 'POST'}));
  }

  /**
   * 生成Error
   * @param message
   * @param options
   * @return {Error & {type: string}}
   */
  static error (message, options = {type: 'unknown'}) {
    return Object.assign(new Error(), options);
  }

  /**
   * 安全转为数字
   * @param arg
   * @return {number}
   */
  static toNumber (arg) {
    arg = parseInt(arg);
    return Number.isInteger(arg) && arg > 0 ? arg : 0;
  }

  /**
   *
   * @param referer {String}
   * @return {{Accept: string, 'Accept-Encoding': string, 'Accept-Language': string, 'Cache-Control': string, 'User-Agent': string, Referer: *, 'X-Requested-With': string}}
   */
  static headers (referer = '') {
    return {
      'Accept': '*/*',
      'Accept-Encoding': 'gzip, deflate, br',
      'Accept-Language': 'zh-CN,zh;q=0.9',
      'Cache-Control': 'no-cache',
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.57 Safari/537.36',
      'Referer': referer,
      'X-Requested-With': 'XMLHttpRequest',
    };
  }

  /**
   * 生成列表页面的网址
   * @param page
   * @return string
   */
  listPageUrl (page) {
  }

  /**
   * 生成直播间信息的网址
   * @param id
   * @return string
   */
  roomUrl (id) {
  }

}

module.exports = SpiderBaseClass;